import http from "wechat-http";

/**
 * 配置接口基础路径
 */
http.baseURL = 'https://live-api.itheima.net'


// 请求拦截器
http.intercept.request = (config) => {
  // config是请求相关的信息
  // console.log(config);
  const token = getApp().token
  // token 存在 并且当前调用的接口不是刷新token接口时才加请求头
  if (token && !config.url.includes('/refreshToken')) {
    // 如果 config 中没有 header，将 header 设置为 {}
    config.header = config.header || {}
    // token存在 将其添加到请求头中
    config.header.Authorization = token
  }
  return config
}


// 响应拦截器
http.intercept.response = async (res) => {
  // 判断接口返回的状态码 如果是401代表token失效 
  if (res.statusCode === 401) {
    // 如果刷新接口也401 代表refreshToken也失效了  退出登录
    if (res.config.url.includes('/refreshToken')) {
      // 获取页面历史栈
      const pageStack = getCurrentPages()
      // 获取当前页面路由信息
      const currentPage = pageStack[pageStack.length - 1]
      // 跳转登录页
      wx.redirectTo({
        url: `/pages/login/index?returnUrl=/${currentPage.route}`,
      })
      // 添加res.data解决双token失效后log一个"code"是空的错误
      // return
      return res.data
    }
    // 调用刷新token接口  并以请求头的方式将refreshToken传递给后端(这种写法可以传header)
    const { code, data } = await wx.http({
      url: '/refreshToken',
      method: 'post',
      header: {
        Authorization: getApp().refreshToken
      }
    })

    if (code !== 10000) return wx.utils.toast()
    // 把刷新token 返回的最新token 和 refreshToken存储起来
    getApp().setToken(data.token, data.refreshToken)

    // 重新调用之前401的接口拿到正确的数据返回 (room接口请求房屋列表)
    const result = await wx.http({
      ...res.config
    })
    return result
  }
  // 剥离  解套无用数据
  return res.data
}



wx.http = http

export default http